home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1998 #3 / Amiga Plus CD - 1998 - No. 3.iso / pd / spiele / frotz / source / checkbox.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-12  |  1.4 KB  |  67 lines

  1. /* checkbox gadget subclass */
  2.  
  3. #include <proto/bgui.h>
  4. #include <proto/intuition.h>
  5. #include <libraries/bgui_macros.h>
  6. #include "checkbox.h"
  7.  
  8. Class *CheckClass;
  9.  
  10. ULONG CheckGadg_DIMENSIONS(Class *cl,Object *o,struct grmDimensions *dim)
  11. {
  12.   ULONG retval,flags;
  13.  
  14.   if (dim->grmd_RPort->TxHeight <= 8)
  15.   {
  16.     flags = dim->grmd_Flags;
  17.     dim->grmd_Flags |= GDIMF_NO_FRAME;
  18.     retval = CoerceMethodA(BGUI_GetClassPtr(BGUI_BASE_GADGET),o,dim);
  19.     *(dim->grmd_MinSize.Width) += CHECKMARK_WIDTH;
  20.     *(dim->grmd_MinSize.Height) += CHECKMARK_HEIGHT;
  21.     dim->grmd_Flags = flags;
  22.   }
  23.   else
  24.   {
  25.     retval = DoSuperMethodA(cl,o,(Msg)dim);
  26.   }
  27.   return retval;
  28. }
  29.  
  30. __geta4 ULONG DispatchCheckGadg(__a0 Class *cl,__a2 Object *o,__a1 Msg msg)
  31. {
  32.   ULONG retval;
  33.  
  34.   switch (msg->MethodID)
  35.   {
  36.     case GRM_DIMENSIONS:
  37.       retval = CheckGadg_DIMENSIONS(cl,o,(struct grmDimensions *)msg);
  38.       break;
  39.     default:
  40.       retval = DoSuperMethodA(cl,o,(Msg)msg);
  41.       break;
  42.   }
  43.   return retval;
  44. }
  45.  
  46. Class *InitCheckClass(void)
  47. {
  48.   Class *super;
  49.  
  50.   if (CheckClass == NULL)
  51.   {
  52.     if (super = BGUI_GetClassPtr(BGUI_CHECKBOX_GADGET))
  53.     {
  54.       CheckClass = MakeClass(NULL,NULL,super,0,0);
  55.       if (CheckClass)
  56.     CheckClass->cl_Dispatcher.h_Entry = (HOOKFUNC)DispatchCheckGadg;
  57.     }
  58.   }
  59.   return CheckClass;
  60. }
  61.  
  62. void FreeCheckClass(void)
  63. {
  64.   if (CheckClass) FreeClass(CheckClass);
  65.   CheckClass = NULL;
  66. }
  67.